package main

import (
	"flag"
	"fmt"
)

/*
1、基本介绍
说明：前面的方式比较原生，对解析参数不是特别的方便，特别是带有指定参数形式的命令行
比如：cmd > main.exe -f c:/aaa.txt -p 200 -u root这样的形式命令行，go设计者给我们提供了flag包，可以方便的解析命令行参数，而且参数顺序可以随意
*/
func main() {
	//定义几个变量，用于接收命令行的参数值
	var user string
	var pwd string
	var host string
	var port int
	/*
		func StringVar(p *string, name string, value string, usage string)
		StringVar用指定的名称、默认值、使用信息注册一个string类型flag，并将flag的值保存到p指向的变量。
	*/
	//&user就是接收用户名命令行中输入的-u后面的参数值
	//"u"就是-u 指定参数
	//""，默认值
	//"用户名，默认为空" 说明
	flag.StringVar(&user, "u", "", "用户名，默认为空")
	flag.StringVar(&pwd, "pwd", "", "密码默认为空")
	flag.StringVar(&host, "h", "localhost", "主机名默认为localhost")
	flag.IntVar(&port, "port", 3306, "端口号默认为3306")
	//这里有一个非常重要的操作，转换，必须调用该方法
	//从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时，会返回ErrHelp。
	flag.Parse()
	//输出结果
	fmt.Printf("user=%v pwd=%v host=%v port=%v\n",
		user, pwd, host, port)

	/*
		执行过程
		命令行的方式执行代码
		go build main.exe
		.\main.exe -u root -pwd 123456 -h 127.0.0.1 -port 8808
	*/

}
